import { RouteRecordRaw } from 'vue-router'
import { Config } from '/@/config/Config.ts'
import router from '/@/router/Router.ts'

export namespace RouterUtil {
  /**
   * 跳转到来源路由，若未指定来源路由则无任何操作
   * @param defaultRouter 默认来源路由
   * @param isDecodeURI 是否对参数解码
   * @return 返回值就是router.push的跳转结果，即Promise对象
   */
  export const backToSourceRoute = (defaultRouter: string = '/', isDecodeURI: boolean = true) => {
    let sourceRoute: string = router.currentRoute.value.query[Config.router.sourceRouterName] as string
    if (!sourceRoute) {
      sourceRoute = defaultRouter
    }
    return router.push({ path: isDecodeURI ? decodeURIComponent(sourceRoute) : sourceRoute })
  }

  /**
   * 添加路由。仅顶级，若routerList中有子路由，路由对象会自动处理。路由的上级由meta.layoutName决定
   */
  export const addRouterList = (routerList: RouteRecordRaw[]) => {
    routerList.forEach(item => {
      // 若未设置layoutName，则无布局页面，其自己就是顶级。但是它的路径必须以/开头
      // 若设置了layoutName但是未找到对应的组件，则同样会将其自己就是顶级。但是它的路径必须以/开头
      if (item.meta?.layoutName) {
        router.addRoute(item.meta.layoutName.toString(), item)
      } else {
        if (!item.path.startsWith('/')) {
          item.path = '/' + item.path
          console.warn('无布局页面或未找到布局页面的路由路径必须以/开头，系统已自动添加：' + item.path)
        }
        router.addRoute(item)
      }
    })
  }
}
